#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>

//信号处理函数
static void int_handler(int s)
{
	write(1, "!",1);
}

int main()
{
	int i;
	sigset_t set, saveset;
	//设置信号行为
	signal(SIGINT, int_handler);
	//清空信号集并把SIGINT添加到信号集
	sigemptyset(&set);
	sigaddset(&set, SIGINT);
	//设置SIGINT通
	sigprocmask(SIG_UNBLOCK, &set, &saveset);

	while(1)
	{
		//SIGINT阻塞
		sigprocmask(SIG_BLOCK, &set, NULL);
		//打印5个*号
		for(i = 0; i < 5; i ++)
		{
			write(1, "*", 1);
			sleep(1);
		}
		//SIGINT通
		sigprocmask(SIG_UNBLOCK, &set, NULL);//*** ^C ** ! \n
		//打印一个回车
		write(1, "\n", 1);
	}

	//恢复原来的状态
	sigprocmask(SIG_SETMASK, &saveset, NULL);

	exit(0);
}
